package com.zyx.mpdemo.mapper;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.zyx.mpdemo.mapper.base.EasyBaseMapper;
import com.zyx.mpdemo.model.entity.User;
import com.zyx.mpdemo.model.vo.PartUser;
import org.apache.ibatis.annotations.MapKey;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;


/**
 * @author Yaxi.Zhang
 * @since 2022/3/28 10:25
 * desc:
 */
@Repository
public interface UserMapper extends EasyBaseMapper<User> {

    /**
     * 根据id查询用户信息为map集合
     * 如果只有一个参数, 不需要使用@Param注解
     * 如果有多个, mapper.xml中可以使用#{param1} #{param2} ... 引用, 当然也可以使用@Param中定义的name进行引用
     */
    @MapKey(value = "id")
    Map<Long, Map<String, Object>> selectMapByAge(Integer age);

    /**
     * 通过年龄查询用户信息并分页
     * MyBatis-Plus所提供的分页对象，必须位于第一个参数的位置
     */
    Page<User> selectPageVo(@Param("page") Page<User> page, @Param("age") Integer age);

    /** 注解方式查询 */
    @Select("select user_name,age,email from t_user where id = #{id}")
    PartUser queryPartUserById(@Param("id") Long id);

    @Select("select user_name,age,email from t_user where user_name like '%${name}%'")
    List<PartUser> queryPartUserLikeName(@Param("name") String name);

    /** 注意${} 与 #{} 的区别 */
    @Select("select user_name,age,email from t_user where user_name like '%${likeName}%'")
    Page<PartUser> selectPagePartUser(@Param("page") Page<PartUser> page, @Param("likeName") String likeName);

}